package com.financing.controller.invest;
import java.util.Date;

import com.financing.enums.invest.BidStatus;
import com.financing.model.invest.Bid;
import com.financing.model.invest.BidCheck;
import com.financing.model.user.User;
import com.financing.service.invest.BidCheckService;
import com.financing.service.system.LoggerService;
import com.financing.util.DateUtil;
import com.financing.util.Json;
import com.financing.util.Str;
import com.jfinal.aop.Before;
import com.jfinal.core.Controller;
import com.jfinal.plugin.activerecord.tx.Tx;

public class BidCheckController extends Controller {
	private static LoggerService log = new LoggerService();
	private static BidCheckService bidCheck = new BidCheckService();

	/**
	 * 标的审核
	 * @throws Exception 
	 */
	@Before(Tx.class)
	public void index() throws Exception {
		User u = getAttr("user");
		Date now = new Date();
		Bid b =  Bid.me.findById(getParaToInt("id",0));
		BidCheck bc = bidCheck.findByBid(b.getId());
		boolean flag = Str.eq("approve", getPara("operation","approve"));
		
		// 判断标的是否存在
		if(bc!=null && bc.getId()>0){
			if(Str.eq(BidStatus.DRAFTING, b.getStatus())){
				if(flag){
					bc.setStatus("等待一审").update();
					b.setStatus(BidStatus.FOUNDING).update();
					// 日志记录
					log.build("标的审核", b.getName()+"标的一审通过", u.getId(), "backend");
				}
				renderJson(Json.ok("操作成功！"));
				
			}else if(Str.eq(BidStatus.FOUNDING, b.getStatus())){

				if(flag){
					b.setStatus(BidStatus.CHECKING).update();
					bc.setStatus("等待二审");
					// 日志记录
					log.build("标的审核", b.getName()+"标的一审通过", u.getId(), "backend");
				}else{
					b.setStatus(BidStatus.DRAFTING).update();
					bc.setStatus("一审驳回");
					// 日志记录
					log.build("标的审核", b.getName()+"标的一审驳回", u.getId(), "backend");
				}
				bc.setFoundTime(now).setFoundUserId(u.getId()).setFoundUserName(u.getRealName()).update();
				renderJson(Json.ok("操作成功！"));
				
			}else if(Str.eq(BidStatus.CHECKING, b.getStatus())){
				
				if(flag){ 
					
					String type = getPara("type", BidStatus.QUEUING);
					
					// 判断时间是否合规
					if((Str.eq(BidStatus.WAITING, type) || Str.eq(BidStatus.TRADING, type)) && b.getStartTime().compareTo(new Date())<0){
						renderJson(Json.error("标的起投时间不正确，请检查！"));
						return ;
					}
					
					// 体验标毋须提交
					String code = DateUtil.getTimeStamp();
					if(Str.eq("experi", b.getType())) {
						String submitTime = getPara("submitTime","");
						if(Str.nb(submitTime)){
							b.setSubmitTime(DateUtil.format(submitTime, DateUtil.DATETIME_DEFAULT_FORMAT)).update();
						}
						b.setCode(code).setStatus(type).update();
						renderJson(Json.ok("操作成功！"));
						bc.setStatus("二审通过");
						// 日志记录
						log.build("标的审核", b.getName()+"标的二审通过", u.getId(), "backend");
					}else {
						String submitTime = getPara("submitTime","");
						if(Str.nb(submitTime)){
							b.setSubmitTime(DateUtil.format(submitTime, DateUtil.DATETIME_DEFAULT_FORMAT)).update();
						}
						b.setCode(code);
						b.setStatus(type).update();
						renderJson(Json.ok("操作成功！"));
						bc.setStatus("二审通过");
						// 日志记录
						log.build("标的审核", b.getName()+"标的二审通过", u.getId(), "backend");
					}
				} else{
					// 日志记录
					log.build("标的提交", b.getName()+"标的二审驳回", u.getId(), "backend");
					bc.setStatus("二审驳回");
					b.setStatus(BidStatus.DRAFTING).update();
					renderJson(Json.ok("操作成功！"));
				}
				bc.setCheckTime(now).setCheckUserId(u.getId()).setCheckUserName(u.getRealName()).update();
			}
		}else{
			renderJson(Json.error("项目审核状态不正确！"));
		}
	}
}
 